/*
 * ==========================================================================*\
 * | $Id$
 * |*-------------------------------------------------------------------------*|
 * | Copyright (C) 2009 Virginia Tech | | This file is part of CloudSpace. | |
 * CloudSpace is free software; you can redistribute it and/or modify | it under
 * the terms of the GNU General Public License as published | by the Free
 * Software Foundation; either version 3 of the License, or | (at your option)
 * any later version. | | CloudSpace is distributed in the hope that it will be
 * useful, | but WITHOUT ANY WARRANTY; without even the implied warranty of |
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | GNU General
 * Public License for more details. | | You should have received a copy of the
 * GNU General Public License | along with CloudSpace; if not, see
 * <http://www.gnu.org/licenses/>.
 * \*==========================================================================
 */

package cloudspace.security;

import org.springframework.security.authentication.DisabledException;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;


// -------------------------------------------------------------------------
/**
 * Implements the local user authentication mechanism.
 * 
 * @author Tony Allevato
 * @author Last changed by $Author$
 * @version $Revision$, $Date$
 */
public class LocalUserDetailsService implements UserDetailsService
{
    // ~ Methods ...............................................................

    // ----------------------------------------------------------
    public synchronized UserDetails loadUserByUsername( String userName )
        throws UsernameNotFoundException
    {
        CloudSpaceUser user = UserRegistry.getInstance().getUser( userName );

        if ( user == null
            || !UserRegistry.AUTHENTICATOR_LOCAL.equals( user.getAuthenticator() ) )
        {
            throw new UsernameNotFoundException( "User '" + userName
                + "' was not found" );
        }
        else if ( !user.isEnabled() )
        {
            throw new DisabledException( "User " + userName + " is disabled" );
        }
        else
        {
            return user;
        }
    }
}
